iT邦幫忙

2024 iThome 鐵人賽

DAY 10
0
Python

從0開始學習Python-為未來學習AI奠定基礎系列 第 10

從0開始學習Python---for 迴圈、九九乘法表、質數判斷

  • 分享至 

  • xImage
  •  

for 迴圈與其應用

Python 的 for 迴圈 是程式中常見的控制結構之一,它會逐一遍歷物件中的每個元素,過程中可進行輸出、記錄或操作元素,特別適合需要對每個元素進行重複操作的情境。
先來看看 for 迴圈的流程圖:
https://ithelp.ithome.com.tw/upload/images/20240910/20168994s30oUmUzeh.png

基本語法

for var in 可迭代物件:
    程式碼區塊
  • 可迭代物件:如串列、元組、字典、集合、或 range() 函數等。
  • 迭代(Iteration):指重複執行特定指令直到所有元素都被處理完畢。
    每次從可迭代物件中取出一個元素,賦值給變數 var,然後執行程式碼區塊,直到所有元素被迭代一次,迴圈才會終止。
    而程式碼區塊要使用正確的縮排進行控制,類似於 if 敘述。

range() 函數的應用

Python 的 range() 函數生成一個等差級數序列,稱為可迭代物件,這個序列通常被用作迴圈計數器。

range() 的基本格式

range(start, stop, step)
  • start:起始值,預設為 0。
  • stop:結束值(沒有包含)。
  • step:步長,預設為 1,可設為負數來生成遞減序列。

來看看實例,試著顯示出1~5之間的整數:

https://ithelp.ithome.com.tw/upload/images/20240910/20168994VjwwXjaqVq.png
https://ithelp.ithome.com.tw/upload/images/20240910/201689942mo9jIMXGY.png

巢狀 for 迴圈

巢狀迴圈是指一個迴圈內還有另一個迴圈,這樣的結構會將外層迴圈的每次執行,與內層迴圈的多次執行相結合。
例如,如果外層迴圈需要執行 n 次,而內層迴圈需要執行 m 次,則整體的執行次數會是 n*m。

這裡可以練習看看九九乘法表的應用:

https://ithelp.ithome.com.tw/upload/images/20240910/201689948uxEHK6XBm.png

首先,外層的迴圈將進行9次,內層迴圈也會進行9次,因此可以形成9*9乘法表。
%-3d 主要用於格式化 result,表示每個輸出佔3格並左對齊。同行的 end=" " 設定輸出後空一格且不換行。
而內層迴圈執行完後,外層迴圈則執行 print(),這會在下次進入內層迴圈前換行輸出。

https://ithelp.ithome.com.tw/upload/images/20240910/201689943OEVWHQsVC.png

控制 for 迴圈

break:若需要根據條件來提前結束迴圈時可以使用,當某條件成立時,可以立即跳出迴圈。
continue:可以讓迴圈暫時跳過當次的執行,直接進入下一次的迴圈。

應用

  • break 應用:i在不同條件下進行迴圈,遇到數字5時,使用 break 讓迴圈終止執行。

https://ithelp.ithome.com.tw/upload/images/20240910/20168994jirH9n3ZwP.png
https://ithelp.ithome.com.tw/upload/images/20240910/20168994KJBrPiScvY.png

上述在第一個迴圈的測試中,當碰到迴圈元素是5時,迴圈將終止,所以只有列出"1, 2, 3, 4,"元素。
在第二個迴圈的測試中,因為這個迴圈是以 step=2 的方式遍歷 0~11,其中本來就不會有5,所以不受條件影響,整個迴圈可以正常執行到結束。

  • continue 應用:列出從 1 到 20 的所有整數,但使用 continue 跳過 5 的倍數。

https://ithelp.ithome.com.tw/upload/images/20240910/20168994KOLNKCv6G7.png
https://ithelp.ithome.com.tw/upload/images/20240910/20168994Q2Vb1Tj815.png

當進入 if 條件並判斷為 True(number 是 5 的倍數時),會執行 continue 跳過目前迴圈的其餘部分,直接進入下一次的迴圈,因此 print(number) 不會執行,像 5、10、15、20 這些數字不會被輸出。
若 number 不是 5 的倍數,if 條件不成立,程式將執行 print(number) 輸出目前的 number ,顯示所有非 5 的倍數的數字。

for-else 結構

for-else 是 Python 的一個特殊結構,它在 for 迴圈正常執行完後,會執行 else 部分的程式碼。這個結構常用於質數測試等情境中,如果迴圈內沒有 break 跳出迴圈,則執行 else 區塊的程式碼。

一起來看看今天最後的應用!質數測試程式:如果輸入的數字是質數則輸出是質數,否則輸出不是質數。

https://ithelp.ithome.com.tw/upload/images/20240910/20168994lsVHG7Iq77.png

https://ithelp.ithome.com.tw/upload/images/20240910/20168994DMfFywEakn.png

這題的難點在於將 for 迴圈放在 else 更適合處理,因為 2 是明確的質數,直接用 if 條件輸出即可。
接著是 for 迴圈的範圍設置。由於每個數都有 1 和自身作為因數,這部分不需判斷。因此只需檢查 2 到 num-1 的數字,如果 num 能被其中的數整除,代表它有其他公因數,就不是質數,迴圈也可立即中止。
相反的,若無法整除,表示 2 到 num-1 間無其他公因數,此數即為質數。

第二個 else 與 for 迴圈相關,只有在迴圈完整執行並未觸發 break 時才會執行;若執行了 break,第二個 else 則不會運行。

結語

學完迴圈之後,我覺得這個概念非常實用。以前在做重複動作的時候,總是要一行一行的寫出來,既麻煩又容易出錯,但迴圈讓我可以用幾行簡單的程式碼來處理大量的數據,大大提升了效率><

反思一下,剛開始接觸迴圈時覺得它好像很難懂,特別是巢狀迴圈,經常會搞混內外層迴圈的執行順序。但是在我經過了幾次的練習後,還學會了搭配 break 和 continue 來調整迴圈的執行邏輯,才發現原來可以這麼精準的控制程式運作

最後想說,學會迴圈真的讓我看待程式邏輯的方式有了很大的改變。它不僅幫助我優化程式的結構,也讓我對「自動化」有了更多的理解和體會~


上一篇
從0開始學習Python---串列(list)
下一篇
從0開始學習Python---元組(Tuple)、字典(Dictionary)
系列文
從0開始學習Python-為未來學習AI奠定基礎27
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言